/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package datasource;

import datasource.pixel.MonoPixel;
import datasource.pixel.Pixel;

/**
 *
 * @author Fabian
 */
public class ColorTable {

    Pixel colorpallete[];
    int colordepth;

    public ColorTable() {
    }

    /**
     *
     * @param amount: puede ser el numero de colores, o la profundidad de color, conforme sea el valor de "mode"
     * @param mode:
     * @value 0 si se forma la paleta de colores deacuerdo al numero de colors
     * @value 1 si se forma la paleta de colores deacuerdo a la profundidad de color
     */
    //mode: 0 para numero de colores, 1 para profindidad de color
    public ColorTable(int colordepth) {
        this.colordepth = colordepth;
        colorpallete = new Pixel[(int) Math.pow(2, colordepth)];
        //256 es el tamaño en bits de un byte. El -1 es porque el indice empieza
        //desde 0 y no desde 1
        int szcolorinterval = (256 / (colorpallete.length - 1) - 1);
        switch (colordepth) {
            //paleta monocromatica
            case 1:
                for (int i = 0; i < colorpallete.length; i++) {
                    colorpallete[i] = new MonoPixel((byte) (i * szcolorinterval));
                }
                break;
            //no hay mas profundidades implementadas
            default:
                break;
        }
    }

    public int getColordepth() {
        return colordepth;
    }

    public void setColordepth(int colordepth) {
        this.colordepth = colordepth;
    }

    public Pixel[] getColorpallete() {
        return colorpallete;
    }

    public void setColorpallete(Pixel[] colorpallete) {
        this.colorpallete = colorpallete;
    }

    public Pixel getColorAt(int pos) {
        try {
            return colorpallete[pos];
        } catch (IndexOutOfBoundsException e) {
            return null;
        }
    }

    public long getColorPalleteSize() {
        if (colorpallete != null) {
            return colorpallete.length;
        } else {
            return -1;
        }
    }
}
